package com.bgds.sys.data.iXCom29d.protocol.utils;


import com.bgds.sys.common.utils.ByteUtil;
import com.cisdi.data.common.exception.BusinessException;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.Charset;


/**
 * @author: lhp
 * @date: 2019/10/8
 **/
public class IXComConverterUtils {
    private static final char BLANK_SPACE = ' ';


    /**
     * 数字数据：则在不满位数时左补0：
     * 例如：421：   “00421”在5位数字值的情况下
     * -421：   “-0421”
     * 字符串数据：则在不够长度时右补空格
     * 例如：TSB：   “TSBDDDD”在7位字符串值的情况
     *
     * @param config
     * @param reader
     * @return
     */
    public static Object convertProperty(IXComActionParamDTO.PropertyConfig config, ByteBuffer reader, Charset charset) {
        byte[] subBody = new byte[config.getFixedLength()];
        reader.get(subBody);
        switch (config.getPropertyType()) {
            case INT:
                if (config.getConvertTo() == 1) {
                    return  ByteBuffer.wrap(subBody).order(ByteOrder.BIG_ENDIAN).getShort();
                } else {
                    return ByteBuffer.wrap(subBody).order(ByteOrder.LITTLE_ENDIAN).getInt();
                }
            case FLOAT:
                if (config.getConvertTo() == 1) {
                    return ByteBuffer.wrap(subBody).order(ByteOrder.BIG_ENDIAN).getFloat();
                } else {
                    return ByteBuffer.wrap(subBody).order(ByteOrder.LITTLE_ENDIAN).getFloat();
                }
            case BYTE:
                return ByteUtil.getChar(subBody);
        }

        //		byte[] subBody = new byte[config.getFixedLength()];
//		reader.get(subBody);
//		switch (config.getPropertyType()) {
//			case INT:
//			    Integer value = ByteUtil.bytesToInt1(subBody,0);
//
//				return value;
//			case FLOAT:
//				Float f = ByteUtil.byte2float(subBody);
//				return f;
//			case DOUBLE:
//				Float o = ByteUtil.byte2float(subBody);
//				return o;
//			case BYTE:
//				byte c=ByteUtil.getChar(subBody);
//				return c;
//		}
//		char[] charArr = null;
//		try {
//		    byte[] subBody = new byte[config.getFixedLength()];
//			reader.get(subBody);
//			String subValue = new String(subBody, charset);
//			charArr = subValue.toCharArray();
//		} catch (Exception e) {
//			throw new BusinessException("ixcom29d读取字符数组失败" + e.getLocalizedMessage(), e);
//		}
//		String value = new String(charArr);
//		switch (config.getPropertyType()) {
//        case BYTE:
//        	return Byte.valueOf(value);
//        case SHORT:
//            return Short.valueOf(value);
//        case INT:
//            return Integer.valueOf(value);
//        case LONG:
//            return Long.valueOf(value);
//        case BOOLEAN:
//        	 value = value.trim().replaceFirst("0*", "");
//
//        	 if("true".equalsIgnoreCase(value) || "1".equals(value)) {
//        		 return true;
//        	 }else if("false".equalsIgnoreCase(value) || "0".equals(value)) {
//				return false;
//			}
//             break;
//        case FLOAT:
//        case DOUBLE:
//        	if(config.getPrecision() != null) {
//        	    int splitIndex = value.length() - config.getPrecision();
//        	    if(splitIndex < 0) {
//        	    	throw new BusinessException("config:" + config + ",value:" + value + ",precision error");
//        	    }
//        	    String prev = value.substring(0, splitIndex);
//        	    String end = value.substring(splitIndex);
//
//        	  //  BigDecimal decimal = new BigDecimal(prev + "." + end);
//				BigDecimal decimal = new BigDecimal(prev + end);
//        	    return decimal;
//        	}else {
//				return new BigDecimal(value);
//			}
//        case STRING:
//        	StringBuilder builder = new StringBuilder();
//
//            int index = charArr.length;
//        	for (int i = charArr.length -1 ; i >= 0; i--) {
//
//				if(charArr[i] == BLANK_SPACE) {
//					index = i;
//					continue;
//				}else {
//					break;
//				}
//			}
//
//        	for (int j = 0; j < index; j++) {
//        		builder.append(charArr[j]);
//			}
//
//        	return builder.toString();
//        case PLACEHOLDER:
//            return null;
//            default:
//		}

        throw new BusinessException(config.toString() + "解析失败,ixcom29d");
    }
}
